/**
 * 1、类成员的可见性
 *      用来控制class的方法和属性，让class的外部是不是可以使用
 * 2、public:公有的，默认
 *    protected:受保护的；
 *              仅对其声明所在的自己的类和子类中（非实例对象）可见
 *              在子类的方法内部可以通过this来访问父类中受保护的成员，但是，对实例不可见
 *    private:私有的;
 *            只能类自己的内部使用
 */

//一、public
//父类
class Animals {
   public move(){
        console.log("移动");
        
    }
}

//子类
class Dog extends Animals {
    brak(){
        console.log("叫汪汪");
        
    }
}
let b = new Dog();
//让move方法只能再父类内部使用
b.move() //子类可以访问到


//二、protected
class Animals2 {
    protected move(){
        console.log("protected移动");
        
    }
    huoguo2(){
        //在当前自己的类中调用受保护的move方法
        this.move()
    }
}
class Dog2 extends Animals2 {
   back1(){
       console.log("dog2的汪汪");
       this.move()
   }
}

let d = new Dog2()
d.back1() // dog2的汪汪,protected移动  这时是d在调用back1这个函数
// d.move //这个用法就会报错，属性“move”受保护，只能在类“Animals2”及其子类中访问。

//三、private私有的
class Animals3 {
    private privateFun(){
        console.log("私有的方法");
        
    }
    Fun(){
        console.log("公有的方法");
        
    }
}

class Dog3 extends Animals3 {
    sonFun(){
        console.log("子类的方法");
        this.Fun();
        // this.privateFun //这时就会报错，属性“privateFun”为私有属性，只能在类“Animals3”中访问。
        
    }
}

let a = new Dog3();
a.sonFun()




